package com.exam.sacrifice.util;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

public class BitmapCacheUtils {

    /**
     * 保存 Bitmap 到应用缓存目录
     * @param context 上下文
     * @param bitmap 要保存的 Bitmap
     * @param fileName 文件名（不需要路径，会自动添加 .png 后缀）
     * @return 保存成功返回文件路径，失败返回 null
     */
    public static String saveBitmapToCache(Context context, Bitmap bitmap, String fileName) {
        // 检查 Bitmap 是否有效
        if (bitmap == null || bitmap.isRecycled()) {
            return null;
        }

        // 确保文件名有 .png 后缀
        if (!fileName.toLowerCase().endsWith(".png")) {
            fileName += ".png";
        }

        File cacheFile = new File(context.getCacheDir(), fileName);
        FileOutputStream fos = null;

        try {
            fos = new FileOutputStream(cacheFile);
            // 使用 PNG 格式保存（无损）
            bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
            fos.flush();
            return cacheFile.getAbsolutePath();
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        } finally {
            if (fos != null) {
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    /**
     * 从缓存加载 Bitmap
     * @param context 上下文
     * @param fileName 文件名（不需要路径）
     * @return 加载的 Bitmap，失败返回 null
     */
    public static Bitmap loadBitmapFromCache(Context context, String fileName) {
        // 确保文件名有 .png 后缀
        if (!fileName.toLowerCase().endsWith(".png")) {
            fileName += ".png";
        }

        File cacheFile = new File(context.getCacheDir(), fileName);
        if (cacheFile.exists()) {
            return BitmapFactory.decodeFile(cacheFile.getAbsolutePath());
        }
        return null;
    }
}